home *** CD-ROM | disk | FTP | other *** search
-
- **********************************************************************
- *
- * THIS IS A FLOATING POINT MULTIPLICATION ROUTINE WHICH IMPLEMENTS
- * THE IEEE PROPOSED FLOATING POINT FORMAT ON THE TMS32010.
- *
- **********************************************************************
- *
- * INITIAL FORMAT (ALL 16 BIT WORDS)
- * ------------------
- * | ALL 0 OR 1 | ASIGN (0 OR -1)
- * ------------------
- *
- * ------------------
- * |0|. 15 BITS | AHI (NORMALIZED)
- * ------------------
- *
- * ------------------
- * |0| 9 BITS |--0--| ALO
- * ------------------
- *
- * ------------------
- * | | AEXP (-127 TO 128)
- * ------------------
- *
- * TO HAVE THIS CORRESPOND TO IEEE FORMAT, INPUT 0.1F * 2 ** (E + 1)
- * INSTEAD OF 1.F * 2 ** E AND SUBTRACT 127 FROM E.
- *
- * THE FINAL FORMAT IS THE SAME AS THE INITIAL FORMAT EXCEPT THAT
- * FOR CLO WE HAVE:
- *
- * ------------------
- * | 16 BITS | CLO
- * ------------------
- *
- * THE 16 BITS OF CLO ARE VALID. ANYTHING PAST THESE HAS BEEN
- * TRUNCATED.
- *
- **************************************************************************
- *
- * WORST CASE (EXCLUDING INITIALIZATION AND I/0): 8.4 MICROSECONDS
- * WORDS OF PROGRAM MEMORY: 72
- *
- ***************************************************************************
- *
- MULT IDT 'IEEEMULT'
- DSEG
- *
- AEXP BSS 1
- AHI BSS 1
- ALO BSS 1
- ASIGN BSS 1
- BEXP BSS 1
- BHI BSS 1
- BLO BSS 1
- BSIGN BSS 1
- CEXP BSS 1
- CHI BSS 1
- CLO BSS 1
- CSIGN BSS 1
- TLO BSS 1
- THI BSS 1
- CLOHI BSS 1
- M0003 BSS 1
- ONE BSS 1
- NEGONE BSS 1
- TWO BSS 1
- *
- DEND
- *
- PSEG * BEGIN THE PROGRAM SEGMENT *
- *
- IN ASIGN,PA0 * INPUT *
- IN AEXP,PA0
- IN AHI,PA0
- IN ALO,PA0
- IN BSIGN,PA0
- IN BEXP,PA0
- IN BHI,PA0
- IN BLO,PA0
- * * FINISHED THE INPUT ROUTINE *
- START LACK 1 * A LITTLE INITIALIZATION *
- SACL ONE
- LACK 3
- SACL M0003
- ZAC
- SUB ONE
- SACL NEGONE
- LACK 2
- SACL TWO
- * * DONE WITH THE INITIALIZATION *
- * * ADD EXPONENTS *
- LAC AEXP
- ADD BEXP
- SACL CEXP * CEXP = AEXP + BEXP *
- * * FINISHED ADDING EXPONENTS *
- * * MULTIPLY MANTISSAS *
- LT ALO * FIRST PRODUCT, (ALO * BHI) *
- MPY BHI
- PAC
- SACH THI
- SACL TLO
- *
- LT AHI * SECOND PRODUCT, (AHI * BLO) *
- MPY BLO
- *
- APAC * (ALO * BHI + AHI * BLO) *
- *
- APAC * HAS THE EFFECT OF (AHI * BLO + ALO * BHI)
- * * 2 ** -15 *
- ADDH THI
- ADDS TLO
- SACH THI
- *
- MPY BHI * (AHI * BHI) *
- PAC
- ADDS THI
- *
- SACH CHI,1 * GET RID OF EXTRA SIGN BIT *
- SACL CLO
- * * THE (ALO * BLO * 2 ** -30) IS LOST DUE TO THE
- * IEEE FORMAT *
- * * FINISHED MULTIPLYING THE MANTISSAS *
- *
- * * CHECK SPECIAL CASES AND WRAP THINGS UP *
- BNZ OK * CHI AND CLO ARE STILL IN THE ACC *
- *
- ZAC * IF C IS ZERO LOAD CEXP WITH ZERO *
- SACL CEXP
- B SETSIN * BRANCH TO SET THE SIGN *
- *
- OK LAC CLO,1 * TAKING CARE OF EXTRA SIGN BIT AS ABOVE *
- SACL CLO
- LAC ONE,14 * MASK OFF POSSIBLE MSB *
- AND CHI
- BNZ SETSIN * BRANCH IF NORMALIZATION NOT NECESSARY *
- *
- SHIFT1 LAC CEXP * HERE A LEFT SHIFT OF ONE IS NECESSARY *
- SUB ONE
- SACL CEXP
- *
- ZALH CHI
- ADDS CLO
- SACH CHI,1
- LAC CLO,1
- SACL CLO
- *
- SETSIN ZALS ASIGN
- XOR BSIGN
- BNZ NEG * IF ASIGN XOR BSIGN != 0 THE PRODUCT IS NEGATIVE *
- *
- ZAC
- SACL CSIGN
- B OUTPUT
- *
- NEG LAC NEGONE * NEGONE = -1 *
- *
- SACL CSIGN
- *
- OUTPUT OUT CSIGN,PA1
- OUT CEXP,PA1
- OUT CHI,PA1
- OUT CLO,PA1
- *
- SELF B SELF
- *
- * * END THE PROGRAM SEGMENT *
- END